package com.gonsin.gmessage.logic.model;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;

@Data
public class GMessagePageResult<T> {

    @ApiModelProperty("列表数据")
    private List<T> data;

    @ApiModelProperty("页数")
    private int pageCount = -1;

    @ApiModelProperty("当前页码")
    private int page = -1;

    @ApiModelProperty("总数量")
    private int count;

    public List<T> getData() {
        return data;
    }

    public void setData(List<T> data) {
        this.data = data;
    }

    public int getPageCount() {
        return pageCount;
    }

    public void setPageCount(int pageCount) {
        this.pageCount = pageCount;
    }

    public int getPage() {
        return page;
    }

    public void setPage(int page) {
        this.page = page;
    }

    public static <D> GMessagePageResult<D> newInstance(List<D> data, Integer page, Integer pageCount){
        GMessagePageResult<D> bo = new GMessagePageResult<D>();
        bo.setData(data);
        if(page != null){
            bo.setPage(page);
        }
        if(pageCount != null){
            bo.setPageCount(pageCount);
        }
        return bo;
    }

//    public static <D> ListBo<D> newInstance(List<D> data, Integer page, Integer totalCount){
//        ListBo<D> bo = new ListBo<D>();
//        bo.setData(data);
//        if(page != null){
//            bo.setPage(page);
//        }
//        if(pageCount != null){
//            bo.setPageCount(pageCount);
//        }
//        if(count != null){
//            bo.setCount(count);
//        }
//
//        return bo;
//    }


    public static <D> GMessagePageResult<D> newInstance(List<D> data, Integer page, Integer pageCount, Integer count){
        GMessagePageResult<D> bo = new GMessagePageResult<D>();
        bo.setData(data);
        if(page != null){
            bo.setPage(page);
        }
        if(pageCount != null){
            bo.setPageCount(pageCount);
        }
        if(count != null){
            bo.setCount(count);
        }

        return bo;
    }

    public static <D> GMessagePageResult<D> newInstance(List<D> data){
        GMessagePageResult<D> bo = new GMessagePageResult<D>();
        bo.setData(data);
        bo.setPage(-1);
        bo.setPageCount(-1);
        return bo;
    }

    public static <D> GMessagePageResult<D> empty() {
        GMessagePageResult<D> bo = new GMessagePageResult<>();
        bo.setData(new ArrayList<>());
        bo.setPage(0);
        bo.setPageCount(0);
        return bo;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }


}
